package com.szlanyou.thirdsdk.retrofit.client;

import java.util.Map;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.QueryMap;

/**
 * @author 陈章
 * create at 2020/12/22 9:12
 * desc:
 * 为了与业务解耦，将Observable的泛型定义为ResponseBody，具体的返回结构交由使用者去定义。
 */
public interface HttpClientService {
    /**
     * POST请求，返回类型为String,可能是json，也可能是别的类型。
     * 注意@FormUrlEncoded注解，有的后台会做过滤判断，所以不能使用。如网关1.0
     *
     * @param actionUrl
     * @param map
     * @return
     */
    @FormUrlEncoded
    @POST("{actionUrl}")
    Observable<ResponseBody> post(@Path(value = "actionUrl", encoded = true) String actionUrl, @FieldMap Map<String, Object> map);

    /**
     * POST请求
     * @param actionUrl         请求地址
     * @param body              请求体
     * @param headerMap         请求头
     * @return
     */
    @POST("{actionUrl}")
    Observable<ResponseBody> post(@Path(value = "actionUrl", encoded = true) String actionUrl, @Body RequestBody body,@HeaderMap Map<String, Object> headerMap);

    /**
     * GET请求
     * @param actionUrl         请求地址
     * @param queryMap          请求参数
     * @param headerMap         请求头
     * @return
     */
    @GET("{actionUrl}")
    Observable<ResponseBody> get(@Path(value = "actionUrl", encoded = true) String actionUrl, @QueryMap Map<String, Object> queryMap,@HeaderMap Map<String, Object> headerMap);

}
